package com.itlong.cloud.app.dao;

import com.itlong.cloud.POJO.PO.AppVisitorPassCodeRecordPO;
import com.itlong.cloud.POJO.PO.RoomInfoPO;
import com.itlong.cloud.POJO.VO.app.AppGetVisitorRecordPageVO;
import com.itlong.cloud.POJO.VO.app.MiniGetReservationProofPageVO;
import com.itlong.cloud.POJO.VO.app.MiniGetVisitorPassRecordPageVO;
import com.itlong.cloud.abstracts.IAbstractBaseDao;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

import java.util.List;
import java.util.Map;

/**
 * <desc>
 *      访客通行密码记录数据访问接口
 * </desc>
 *
 * @createDate
 */
@Mapper
@Repository
public interface IAppVisitorPassCodeRecordDao extends IAbstractBaseDao<AppVisitorPassCodeRecordPO>{
    /**
     * <desc>
     *      保存通行密码记录
     * </desc>
     *
     * @param params 数据参数
     * @return
     * @author Jiaqi.X
     * @createDate 2017/10/30
     */
    Integer save(Map<String,Object> params);

    /**
     * <desc>
     *      修改
     * </desc>
     *
     * @param params 修改的参数
     * @return 受影响的行数
     * @author Juguang.S
     * @createDate 2020/09/16
     */
    Integer update(Map<String,Object> params);


    /**
     * <desc>
     *      保存访客人脸信息
     * </desc>
     *
     * @param passId 访客信息编号
     * @param uploadFilePath 图片地址
     * @param vFaceId 百度中的人脸编号
     * @return sql执行行数
     * @author Qiang.S
     * @createDate 2019/02/27
     */
    Integer setVisitPassFace(@Param("passId") String passId, @Param("uploadFilePath")String uploadFilePath, @Param("vFaceId")String vFaceId);

    /**
     * <desc>
     *      获取房间的楼栋id和单元id
     * </desc>
     *
     * @param roomId 房间id
     * @param projectId 项目id
     * @param userId 用户Id
     * @return
     * @author Jiaqi.X
     * @createDate 2017/10/30
     */
    RoomInfoPO getRoomBuildAndUnitInfo(@Param("roomId")String roomId,
                                       @Param("projectId")String projectId,
                                       @Param("userId") String userId);

    /**
     * <desc>
     *      检查这个时间段内是否有重复的动态密码
     * </desc>
     *
     * @param random 随机动态密码
     * @param startTime 开始时间
     * @param endTime 结束时间
     * @return
     */
    int checkRepeatPassword(@Param("random")String random,@Param("startTime")String startTime,@Param("endTime")String endTime);


    /**
     * <desc>
     *      获取分页数据集
     * </desc>
     *
     * @param params  查询参数
     * @return
     * @author Jiaqi.X
     * @createDate 2017/10/31
     */
    List<AppGetVisitorRecordPageVO> getPage(Map<String,Object> params);


    /**
     * <desc>
     *      获取分页总数量
     * </desc>
     *
     * @param params 查询参数
     * @return
     * @author Jiaqi.X
     * @createDate 2017/09/27
     */
    Integer getPageCount(Map<String,Object> params);

    /**
     * <desc>
     *      获取项目动态密码验证方式
     * </desc>
     *
     * @param projectId 项目id
     * @return
     * @author Jiaqi.X
     * @createDate 2018/07/16
     */
    Integer getOtpOnlineByProjectId(@Param("projectId")String projectId);

    /**
     * <desc>
     *      获取项目秘钥
     * </desc>
     *
     * @param projectId 项目id
     * @return
     * @author Jiaqi.X
     * @createDate 2018/07/16
     */
    String getProjectKey(@Param("projectId") String projectId);

    /**
     * <desc>
     *      通过单元id获取权限组号
     * </desc>
     * @param unitId
     * @return
     * @author Jiaqi.X
     * @createDate 2018/08/23
     */
    String getGroupNumByUnitId(@Param("unitId") String unitId);

    /**
     * <desc>
     *      设置已分享
     * </desc>
     *
     * @param passId   访客唯一编号
     * @return
     * @author Qiang.S
     * @createDate 2019/04/16
     */
    void setShare(@Param("passId") String passId);

    /**
     * <desc>
     *      根据楼栋,单元,房间查询地址
     * </desc>
     *
     * @param buildId   楼栋编号
     * @param unitId   单元编号
     * @param roomId   房间编号
     * @return
     * @author Qiang.S
     * @createDate 2019/04/16
     */
    String getAddress(@Param("buildId")String buildId, @Param("unitId")String unitId, @Param("roomId")String roomId);

    /**
     * <desc>
     *      根据访客编号获取信息
     * </desc>
     *
     * @param passId 访客编号
     * @return 格式化响应结果
     * @author Qiang.S
     * @createDate 2019/04/24
     */
    AppGetVisitorRecordPageVO getVisitorPassByPassId(String passId);

    /**
     * <desc>
     *      删除访客信息
     * </desc>
     *
     * @param passId 访客编号
     * @return 格式化响应结果
     * @author Qiang.S
     * @createDate 2019/04/28
     */
    Integer deleteVisitorInfo(String passId);

    /**
     * <desc>
     *      根据项目编号查询有关小程序访客审核的配置
     * </desc>
     *
     * @param projectId   项目编号
     * @return
     * @author Juguang.S
     * @createDate 2019/04/26
     */
    Map<String,Object> getProjectMiniInfo(@Param("projectId") String projectId);

    /**
     * <desc>
     *      获取访客预约凭证分页数据集
     * </desc>
     *
     * @param params  查询参数
     * @return
     * @author Juguang.S
     * @createDate 2019/04/26
     */
    List<MiniGetReservationProofPageVO> getReservationProofPage(Map<String,Object> params);

    /**
     * <desc>
     *      获取访客预约凭证分页总数量
     * </desc>
     *
     * @param params 查询参数
     * @return
     * @author Juguang.S
     * @createDate 2019/04/26
     */
    Integer getReservationProofPageCount(Map<String,Object> params);

    /**
     * <desc>
     *      根据手机号获取受访人的userId
     * </desc>
     *
     * @param phoneNum 受访人的手机号
     * @return
     * @author Juguang.S
     * @createDate 2019/04/30
     */
    String getUserIdbyPhoneNum(@Param("phoneNum") String phoneNum);

    /**
     * <desc>
     *      根据userId获取手机号
     * </desc>
     *
     * @param userId userId
     * @return
     * @author Juguang.S
     * @createDate 2019/04/30
     */
    String getPhoneNumByUserId(@Param("userId") String userId);

    /**
     * <desc>
     *      获取访客身份通行记录分页数据集
     * </desc>
     *
     * @param params  查询参数
     * @return
     * @author Juguang.S
     * @createDate 2019/04/30
     */
    List<MiniGetVisitorPassRecordPageVO> getVisitorPassRecordPage(Map<String,Object> params);

    /**
     * <desc>
     *      获取访客身份通行记录分页总数量
     * </desc>
     *
     * @param params 查询参数
     * @return
     * @author Juguang.S
     * @createDate 2019/04/30
     */
    Integer getVisitorPassRecordPageCount(Map<String,Object> params);

    /**
     * <desc>
     *      获取访客单信息
     * </desc>
     *
     * @param userId   用户编号
     * @param projectId   项目编号
     * @return
     * @author Qiang.S
     * @createDate 2019/05/05
     */
    List<MiniGetReservationProofPageVO> getReservationVisitorInfo(@Param("userId") String userId, @Param("projectId")String projectId);

    /**
     * <desc>
     *      获取当前用户为业主身份的人脸注册信息
     * </desc>
     *
     * @param userId   用户编号
     * @param projectId   项目编号
     * @return
     * @author Juguang.S
     * @createDate 2019/05/06
     */
    Map<String,String> getOwnerUserFaceUrlInfo(@Param("userId") String userId, @Param("projectId")String projectId);

    /**
     * <desc>
     *      获取当前用户为访客身份的人脸注册信息
     * </desc>
     *
     * @param userId   用户编号
     * @param projectId   项目编号
     * @return
     * @author Juguang.S
     * @createDate 2019/05/06
     */
    Map<String,String> getVisitorUserFaceUrlInfo(@Param("userId") String userId, @Param("projectId")String projectId);

    /**
     * <desc>
     *      校验该访客记录是否已被物业审批并且已认证过
     * </desc>
     *
     * @param passId   访客单号
     * @return
     * @author Juguang.S
     * @createDate 2019/05/27
     */
    Integer isAllowedAuthenticate(@Param("passId") String passId);

    /**
     * <desc>
     *      根据userId或手机号获取受访人姓名
     * </desc>
     *
     * @param userId userId
     * @param phoneNum phoneNum
     * @return
     * @author Juguang.S
     * @createDate 2019/05/28
     */
    String getUserRealName(@Param("userId") String userId,@Param("phoneNum") String phoneNum);

    /**
     * <desc>
     *      根据roomId获取房间的正背门信息
     * </desc>
     *
     * @param roomId
     * @return
     * @author Juguang.S
     * @createDate 2019/06/26
     */
    String getRoomForDoorInfo(@Param("roomId") String roomId);

    /**
     * <desc>
     *      根据deviceId获取电梯的正背门信息
     * </desc>
     *
     * @param deviceId 机号
     * @param projectId 项目编号
     * @return
     * @author Juguang.S
     * @createDate 2019/06/26
     */
    String getElevatorDoorInfo(@Param("deviceId") String deviceId,@Param("projectId") String projectId);

    /**
     * <desc>
     *      获取有效的访客通行密码记录
     * </desc>
     *
     * @return 有效的访客通行密码记录
     * @author wangzhi
     * @createDate 2019/07/11
     */
    List<Map<String,Object>> getAvailableVisitorPwd(Map<String, Object> params);

}
